perm filename RMAIL.MID[NET,MRC]1 blob sn#249869 filedate 1976-11-26 generic text, type T, neo UTF8
	TITLE RMAIL HACK FOR SAIL
	SUBTTL MRC 11/16/76

.INSRT MACROS

HEADBF:	BLOCK 50.			; MAIL HEADER BUFFER
MSGBFR:	BLOCK 4000.			; MESSAGE BUFFER

RMAIL:	JFCL				; CCL ENTRY
	RESET				; RESET ALL I/O
	GETPPN				; GET MY PPN
	 JFCL				; SILLY SKIP
	HRRZM MAIBOX			; SAVE MAILBOX NAME
	OPEN [0 ? 'DSK,, ? INPBF]	; GET DSK INPUT CHANNEL
	 JRST 4,.-1			; NO DSK CHANNELS?
	OPEN 1,[0 ? 'DSK,, ? OUTBF,,]	; GET DSK OUTPUT CHANNEL
	 JRST 4,.-1			; NO DSK CHANNELS?
	OPEN 2,[200 ? 'TTY,, ? 0]	; TURN OFF TTY ECHOING
	 JRST 4,.-1			; TTY OPEN FAILURE?
	LOOKUP MAIBOX			; NEW MAIL IN MY MAILBOX?
	 JRST PERUSE			; NO, JUST PERUSE OLD MAIL
	OUTSTR [ASCIZ/You have new mail!
/]
	ENTER 1,[SIXBIT/RMAIL TMP/ ? 0 ? 0]; CREATE A TEMP FILE
	 JRST 4,.-1			; CAN'T CREATE TMP FILE?
ETVFLS:	JSR INPCHR			; GET A CHARACTER
	 JRST 4,.-1			; NOT AN ETV FILE?
	CAXE 0,↑L			; END OF ETV DIRECTORY?
	 JRST ETVFLS			; NOT YET
CPYNEW:	JSR INPCHR			; GET A CHARACTER
	 JRST CPYOLD			; ALL DONE
	JSR PUTCHR			; SHOVE IT IN FILE
	JRST CPYNEW			; LOOP FOR MORE
CPYOLD:	RENAME DELBLK			; DELETE MAIL FILE
	 JRST 4,.-1			; DELETE FAILED?
	RELEASE				; FREE UP CHANNEL
	OPEN [0 ? 'DSK,, ? INPBF]	; OPEN UP CHANNEL
	 JRST 4,.-1			; OPEN FAILURE?
	LOOKUP OLDBLK			; FIND OLD RMAIL FILE
	 JRST RNAME			; NONE, JUST RENAME
CPYOL1:	JSR INPCHR			; GET CHARACTER
	 JRST DELOLD			; DONE, DELETE OLD FILE
	JSR PUTCHR			; STORE CHARACTER
	JRST CPYOL1			; AND LOOP FOR MORE
DELOLD:	RENAME DELBLK			; PFFT GOES THIS FILE!
	 JRST 4,.-1			; DELETE ERROR?
RNAME:	RENAME 1,NEWBLK			; AND SHOW UPDATED FILE
	 JRST 4,.-1			; RENAME FAILURE?
PERUSE:	RELEASE				; FREE UP READ
	RELEASE 1,			; FREE UP WRITE
	OPEN [0 ? 'DSK,, ? INPBF]	; OPEN INPUT FILE
	 JRST 4,.-1			; OPEN FAILED???
	OPEN 1,[0 ? 'DSK,, ? OUTBF,,]	; OPEN OUTPUT FILE
	 JRST 4,.-1			; OPEN FAILED?
	LOOKUP REDBLK			; OPEN INPUT SIDE
	 EXIT				; FNF, EXIT
	ENTER 1,WRTBLK			; OPEN OUTPUT SIDE
	 JRST 4,.-1			; CAN'T OVERWRITE FILE?
	JSR INPCHR			; GET A CHARACTER
	 EXIT				; EMPTY FILE...
	CAXE 0,↑O			; HIT A ↑O FOR A MSG?
	 JRST 4,.-1			; CRUFT???
GETHED:	MOVE 1,[POINT. 7,HEADBF]	; LOAD BUFFER POINTER
	STORE %ZEROS,HEADBF,HEADBF+49.	; CLEAR HEADER BUFFER
GETHD1:	JSR INPCHR			; GET A CHARACTER
	 JRST QUIT			; NONE TO GET, QUIT
	IDPB 1				; SAVE CHAR IN BUFFER
	CAXE 0,↑J			; HIT LF YET?
	 JRST GETHD1			; NOT YET
	OUTSTR HEADBF			; OUTPUT HEADER BUFFER
	STORE %ZEROS,MSGBFR,MSGBFR+3999.; CLEAR MESSAGE BUFFER
	MOVE 1,[POINT. 7,MSGBFR]	; LOAD POINTER TO MESSAGE BUFFER
GETMSG:	JSR INPCHR			; GET A CHARACTER
	 JRST GOTMSG			; NONE TO GET, GOT IT
	CAXN 0,↑L			; FORM FEED?
	 JRST GETMSG			; YES, FLUSH IT
	CAXN 0,↑O			; START OF A NEW MESSAGE?
	 JRST GOTMSG			; YES, START DISPLAY
	IDPB 1				; SAVE IN BUFFER
	JRST GETMSG			; AND LOOP FOR MORE
GOTMSG:	SKIPE MSGBFR			; ANY MESSAGE?
	 OUTSTR [ASCIZ/--More--/]
CMND:	INCHRW				; GET A COMMAND
	CAXLE 0,<"←>			; LOWER CASE?
	 TXZ 0,<" >			; YES, MAKE UPPER CASE
	CAXN 0,<" >			; PRINT MORE?
	 JRST [	OUTSTR [ASCIZ/
/]
		OUTSTR MSGBFR		; YES, PRINT MORE
		JRST CMND]		; AND GET A COMMAND
	CAXN 0,"D			; DELETE?
	 JRST [	OUTSTR [ASCIZ/
/]
		JRST GETHED]		; GO TO NEXT MESSAGE
	CAXN 0,"N			; NEXT MESSAGE
	 JRST [	OUTSTR [ASCIZ/
/]
		JSR WRTMSG		; WRITE MESSAGE
		JRST GETHED]		; AND GET NEXT ONE
	CAXN 0,"?			; GIVE HELP?
	 JRST [	OUTSTR [ASCIZ/Options:
<space>	Type body of message
D	Delete this message from RMAIL.TXT file
N	Go to next message, preserving this one
X	Exit, implied by D or N on last message
?	Type this cruft
/]
		JRST CMND]		; END OF CRUFT
	CAXE 0,"X			; EXIT?
	 JRST [	CLRBFI			; NO, FLUSH INPUT
		OUTSTR [ASCIZ/Bad -- "?" for help
/]					; ERROR MESSAGE
		JRST CMND]		; AND GET A COMMAND AGAIN
	JSR WRTMSG			; WRITE OUT MESSAGE
	JSR INPCHR			; GET A CHARACTER
	 JRST QUIT			; NONE TO GET, QUIT
	MOVE 1,				; SAVE IT
	MOVX 0,↑O			; LOAD UP A ↑O
	JSR PUTCHR			; AND OUTPUT IT
	MOVE 1				; GET CHARACTER BACK
	JSR PUTCHR			; OUTPUT IT
	JSR INPCHR			; GET ANOTHER CHARACTER
	 TXNA				; ALL DONE
	  JRST .-3			; NO, LOOP FOR MORE
QUIT:	CLOSE 1,			; CLOSE OFF FILE
	EXIT				; AND EXIT

WRTMSG:	0				; RETURN PC
	MOVX 0,↑O			; GET A ↑O
	JSR PUTCHR			; AND OUTPUT IT
IRPS BFR,,[HEADBF MSGBFR]
	 MOVE 1,[POINT. 7,BFR]		; LOAD BUFFER POINTER
	 ILDB 1				; GET A CHARACTER
	 JUMPN [JSR PUTCHR		; SAVE IT IF NON-NULL
		JRST .-1]		; AND LOOP FOR MORE
TERMIN
	JRST 2,@WRTMSG			; AND RETURN

INPCHR:	0				; RETURN PC
	SOSG INPBF+2			; BUFFER READY?
	 IN				; NO, GET SOMETHING
	  TXNA				; WON
	   JRST 2,@INPCHR		; LOST, RETURN NON-SKIP
	ILDB INPBF+1			; GET A CHARACTER
	JUMPE INPCHR+1			; FLUSH NULLS
	AOS INPCHR			; BUMP RETURN PC
	JRST 2,@INPCHR			; AND RETURN

PUTCHR:	0				; RETURN PC
	SOSG OUTBF+2			; BUFFER FULL?
	 OUT 1,				; YES, SLAM IT OUT
	  TXNA				; WON
	   JRST 4,.-1			; LOST
	IDPB OUTBF+1			; SAVE CHARACTER
	JRST 2,@PUTCHR			; AND SAVE CHARACTER

MAIBOX:	0				; FN1
	'MSG,,				; FN2
	0				; DATE CRUFT
	SIXBIT/  2  2/			; PPN

IRPS TYP,,[OLD NEW RED WRT]
 TYP!BLK: SIXBIT/RMAIL TXT/ ? 0 ? 0	; RMAIL FILE LOOKUP BLOCK
TERMIN

DELBLK:	REPEAT 4,[0 ?]			; FILE DELETE BLOCK

INPBF:	BLOCK 3				; INPUT BUFFER HEADER
OUTBF:	BLOCK 3				; OUTPUT BUFFER HEADER

	END RMAIL